<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>作业</title>
</head>

<body>
  <script>
    //1.封装一个函数实现字符串的翻转 比如 foo('哦泡')->泡哦

    function reversal(str) {
      // 先将字符串分割成单个字符的数组，然后将数组里的item反转，最后将数组item接成一个字符串返回。
      return str.split("").reverse().join("");
    }
    console.log(reversal("哦跑"));

    // 方法二
    function reversalStr(str) {
      var newStr = "";
      for (var i = str.length - 1; i > -1; i--) {
        newStr += str[i];
      }
      console.log(newStr);
    }

    reversalStr("奥利奥牛奶");


    //2.字符串 digite = "0123456789", 把前 5 个字符分割出来， 返回个单字符的数组, 注意， 返回数组里面的数字是字符串类型, string.split("")

    var digite = "0123456789";
    var newDigite = digite.slice(0, 5).split("");
    console.log(newDigite);

    //3.已知有字符串 foo=”get-element-by-id”,写一个 function 将其转化成驼峰表示法”getElementById”.

    // 方法一
    /*  function humpStr(str) {
       var arr = str.split("-");
       // arr[0] = arr[0].trim()
       for (var i = 1; i < arr.length; i++) {
         arr[i] = arr[i].trim();
         arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
 
       }
       return arr.join("");
     }
     console.log(humpStr("get - element - by - id")); */

    // 方法二
    /* function humpStr2() {
      var str = "get-element-by-id";
      for (var i = 0; i < str.length; i++) {
        if (str[i] === "-") {
          str = str.replace((str[i] + str[i + 1]), str[i + 1].toUpperCase())
        }
      }
      console.log(str);
    } */
    // humpStr2()s

    // 方法三
    function humpStr3() {
      var str = "get-element-by-id";
      var newStr = "";
      str.split("-").forEach(function (item, index) {
        index > 0 ?
          (newStr += item.replace(item[0], item[0].toUpperCase())) :
          (newStr = item)
      })
      console.log(newStr);
    }
    humpStr3()

    //4.定义一个函数,将"今天是什么鬼天气，这么热，明天要去游泳！"里面的有"天"的下标输出(用 indexof())
    //定义一个函数,将"今天是什么鬼天气，这么热，明天要去游泳！"里面的有"天"替换成"日"(用 replace())

    function getStrIndex(str, targetStr) {
      for (var i = 0; i < str.length; i++) {
        //由于indexOf只能返回第一次出现目标字符的索引，如果要继续查找多次出现的可以继续从第一次找到的下标开始再查找
        if (str.indexOf(targetStr, i) === i) {
          console.log(`字符串中有"天"的下标为:${i}`);
        }
      }
    }
    getStrIndex("今天是什么鬼天气，这么热，明天要去游泳！", "天")

    function replaceStr(str, targetStr) {
      while (str.indexOf(targetStr) !== -1) {
        str = str.replace(targetStr, "日");
      }
      return str
    }
    console.log(replaceStr("今天是什么鬼天气，这么热，明天要去游泳！", "天"));

    // 方法二
    function replaceStr2() {
      var str = "今天是什么鬼天气，这么热，明天要去游泳！"
      for (var i = 0; i < str.length; i++) {
        if (str[i] === "天") {
          str = str.replace(str[i], "日");
        }
      }
      console.log(str);
    }
    replaceStr2()

    // 方法三
    function replaceStr3() {
      var str = "今天是什么鬼天气，这么热，明天要去游泳！"
      // 利用字符串的replaceAll()方法
      str = str.replaceAll("天", "日")
      console.log(str);
    }
    replaceStr3()

    //5. 查找字符串中(abbcccddddd)出现最多的字符和个数 出现最多的是d出现了5次
    function getStr() {
      var str = "abbcccddddd";
      var obj = {}  // 用对象来记录每个字符出现次数
      for (var i of str) {
        // 判断这个对象属性是否存在，存在+1，不存在赋值为1，
        obj[i] = obj[i] ? obj[i] += 1 : 1
      }
      var max = 0;  //最多出现次数
      var strName = 0;   //出现最多次的字符
      //遍历对象，通过key拿到value（出现次数）进行比较，获取最大值并拿到对应的字符(key)
      for (var key in obj) {
        if (obj[key] > max) {
          max = obj[key];
          strName = key;
        }
      }
      console.log('出现最多的字符是：' + strName + ',' + '出现次数为：' + max);
    }
    getStr()

    // 方法二
    function getStr2() {
      var str = "abbcccddddd"
      // 利用数组的高阶函数reduce()
      var obj = str.split("").reduce(function (pre, item) {
        pre[item] = pre[item] + 1 || 1
        return pre;
      }, {})
      var max = 0;  //最多出现次数
      var strName = 0;   //出现最多次的字符
      //遍历对象，通过key拿到value（出现次数）进行比较，获取最大值并拿到对应的字符(key)
      for (var key in obj) {
        if (obj[key] > max) {
          max = obj[key];
          strName = key;
        }
      }
      console.log('出现最多的字符是：' + strName + ',' + '出现次数为：' + max);
    }
  </script>
</body>

</html>